/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package exceptions.sintactic;

import Analizador_Lexico.Token.TipoToken;

/**
 *
 * @author Administrador
 */
public class UnexpectedTokenException extends SintacticException{
    private TipoToken esperado;
    private TipoToken encontrado;
	private int linea;
	private int columna;

    public UnexpectedTokenException(TipoToken i, TipoToken j, int l, int c){
    	esperado = i;
    	encontrado = j;
    	linea = l;
    	columna = c;
	}

    private String transformar(TipoToken t){
        switch (t){
        
        case IF: return("if");
        case RETURN: return("return");
        case ELSE: return("else");
        case WHILE: return("while");
        case CLASS: return("class");
        case NEW: return("new");
        case SUPER: return("super");
        case THIS: return("this");
        case EXTENDS: return("extends");
        case BOOLEAN: return("boolean");
        case CHAR: return("char");
        case INT: return("int");
        case FOR: return("for");
        case VOID: return("void");
        case STRING: return("string");
        case CLASSDEF: return("classDef");
        case FALSE: return("false");
        case TRUE: return("true");
        case NULL: return("null");
        case PARABRE: return("(");
        case PARCIERRA: return(")");
        case LLAVEABRE: return("{");
        case LLAVECIERRA: return("}");
        case CORCHETEABRE: return("[");
        case CORCHETECIERRA: return("]");
        case ASIG: return("=");
        case PUNTO: return(".");
        case COMA: return(",");
        case PUNTOYCOMA: return(";");
        case MAS: return("+");
        case MENOS: return("-");
        case IGUAL: return("==");
        case PRODUCTO: return("*");
        case DIV: return("/");
        case NOT: return("!");
        case AND: return("&&");
        case OR: return("||");
        case PORCENT: return("%");
        case MAYORYIGUAL: return(">=");
        case MENORYIGUAL: return("<=");
        case MAYOR: return(">");
        case MENOR: return("<");
        case DISTINTO: return("!=");
        case COMILLASIMPLE: return("'");
        case COMILLADOBLE: return("\"");
        case CADENA: return("una cadena");
        case CARACTER: return("un caracter");
        case NUMERO: return("un numero");
        case EOF: return("fin de archivo");
        default: return("un identificador");
        }
    }

    public String getMessage(){
    	return ("UnexpectedTokenException: Se esperaba "+transformar(esperado)+", y se encontro "+transformar(encontrado)+". Linea: "+linea+ " - Columna: "+columna);
   	}
}
